package hehe.log;

import hehe.log.base.Logger;
import hehe.log.build.Di;
import hehe.log.build.xml.parse.XmlConfigurator;

import java.util.HashMap;
import java.util.Map;

/**
 * 日志管理类
 *<B>说明：</B>
 *<pre>
 * 略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class LogManager
{
    /**
     * 定义当前静态变量
     *<B>说明：</B>
     *<pre>
     *  用于单例
     *</pre>
     */
    public static LogManager logManager = null;

    /**
     * 是否调用过初始化方法
     *<B>说明：</B>
     *<pre>
     *  只能调用一次
     *</pre>
     */
    private boolean isInit = false;

    /**
     * 默认配置文件
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    private static final String XML_DEFAULT_CONFIGURE = "easylog.xml";


    static {
        // 加载配置
        XmlConfigurator xml = new XmlConfigurator("/home/xfw/work/java/hehej/easylog.xml");
        Di di = Di.getContainer();
        LogManager log = di.getBean("log");
    }

    /**
     * 日志收集器列表
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    protected Map<String,Logger> loggers = new HashMap<>();

    /**
     * 默认收集器
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    protected Logger defaultLogger;

    /**
     * 默认收集器id
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    protected String defaultLoggerId = "default";

    public LogManager()
    {
        LogManager.logManager = this;
    }

    public static LogManager getLogManager()
    {
        if (LogManager.logManager == null) {
            new LogManager();
        }

        return LogManager.logManager;
    }

    /**
     * 初始化日志
     *<B>说明：</B>
     *<pre>
     *  略
     *</pre>
     */
    public void init()
    {
        // 选择默认日志收集器
        if (this.loggers.size() > 0) {
            if (this.loggers.containsKey(this.defaultLoggerId)) {
                this.defaultLogger = this.loggers.get(this.defaultLoggerId);
            } else {
                // 选择首个logger 作为默认日志收集器
                Object[] loggers = this.loggers.values().toArray();
                this.defaultLogger = (Logger)loggers[0];
            }
        }

        this.isInit = true;
    }

    public Logger getLogger()
    {
        if (this.isInit == false) {
            this.init();
        }

        return this.defaultLogger;
    }

    public Logger getLogger(String LoggerId) throws Exception
    {
        if (this.isInit == false) {
            this.init();
        }

        return this.loggers.get(LoggerId);
    }
}
